package com.zw.pdm.module.designtask.mapper;

import com.zw.pdm.entity.basic.Dept;
import com.zw.pdm.entity.com.DsnProCommon;
import com.zw.pdm.entity.com.DsnTaskCommon;
import com.zw.pdm.entity.designtask.DsnControlIntent;
import com.zw.pdm.entity.designtask.DsnProStruct;
import com.zw.pdm.entity.production.MakeResult;
import com.zw.pdm.entity.rep.Result;
import com.zw.pdm.entity.sys.Role;
import com.zw.pdm.module.designtask.model.DsnDrawChangeModel;
import com.zw.pdm.module.designtask.model.DsnProSingleModel;
import com.zw.pdm.module.designtask.model.DsnProcessModel;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @Description:
 * @Author: China.wsg
 * @Date: 2020/10/21 14:15
 */
public interface DsnProcessMapper {


    /**
     * 科室项目Id集合
     *
     * @param dsnProcessModel
     * @return
     */
    List<Integer> findProjectIdsByQuery(DsnProcessModel dsnProcessModel);

    /**
     * 按条件查询设计进度看板
     *
     * @param dsnProcessModel
     * @return
     */
    List<DsnProcessModel> findProcessListByQuery(DsnProcessModel dsnProcessModel);

    /**
     * 单项目看板项目任务状态
     *
     * @param proId
     * @return
     */
    List<DsnProcessModel> findProProcessStatus(Integer proId);

    /**
     * 根据条件查询项目说明
     *
     * @param dsnProExplain
     * @return
     */
    List<DsnControlIntent> findExplainListByQuery(DsnControlIntent dsnProExplain);

    /**
     * 根据项目ID查询项目部分状态列表
     *
     * @param proId
     * @return
     */
    List<DsnTaskCommon> findPartListByProId(@Param("proId") Integer proId, @Param("special") String special);

    /**
     * 根据条件查询部分
     *
     * @param proId
     * @return
     */
    List<DsnProStruct> findProStructByProId(Integer proId);

    /**
     * 外购、原料、外协列表（单项目看板）
     *
     * @param dsnProSingleModel
     * @return
     */
    List<DsnProSingleModel> findProSingleListByQuery(DsnProSingleModel dsnProSingleModel);

    /**
     * 制作件列表（单项目看板）
     *
     * @param dsnProSingleModel
     * @return
     */
    List<DsnProSingleModel> findMakeSingleListByQuery(DsnProSingleModel dsnProSingleModel);

    /**
     * 图纸变更单（单项目看板）
     *
     * @param dsnProSingleModel
     * @return
     */
    List<DsnProSingleModel> findDrawChangeSingleListByQuery(DsnProSingleModel dsnProSingleModel);

    /**
     * 技术说明（单项目看板）
     *
     * @param dsnProSingleModel
     * @return
     */
    List<DsnProSingleModel> findTecNoteListSingleListByQuery(DsnProSingleModel dsnProSingleModel);

    /**
     * 修改设计任务状态（设计、成本、调试）
     *
     * @param dsnTaskCommon
     * @return
     */
    int editTaskStatusByQuery(DsnTaskCommon dsnTaskCommon);

    /**
     * 修改设计任务状态（修改控制意图状态）
     *
     * @param dsnTaskCommon
     * @return
     */
    int editConTaskStatusByQuery(DsnTaskCommon dsnTaskCommon);

    /**
     * 修改项目部分状态
     *
     * @param dsnTaskCommon
     * @return
     */
    int editProPartCompStatusById(DsnTaskCommon dsnTaskCommon);

    /**
     * 任务状态编辑
     *
     * @param dsnProCommon
     * @return
     */
    int performanceNoteEdit(DsnProCommon dsnProCommon);

    /**
     * 绩效备注查询
     *
     * @param proId
     * @return
     */
    List<DsnProCommon> findProPerformanceNote(Integer proId);

    /**
     * 外购件输出表
     *
     * @param result
     * @return
     */
    List<Result> findRepResultByQuery(Result result);

    /**
     * 制作件输出表
     *
     * @param result
     * @return
     */
    List<MakeResult> findMakeResultByQuery(MakeResult result);

    /**
     * 图纸变更输出表
     *
     * @param result
     * @return
     */
    List<DsnDrawChangeModel> findDrawChangeDetailByQuery(DsnDrawChangeModel result);

    /**
     * 根据部门ID取得所属所
     *
     * @param deptId
     * @return
     */
    Dept findDeptInfoByAccount(Integer deptId);

    /**
     * 删除项目说明
     *
     * @param id
     * @return
     */
    int delExplainById(Integer id);

    /**
     * 修改项目说明
     *
     * @param dsnProExplain
     * @return
     */
    int updExplainById(DsnControlIntent dsnProExplain);

    /**
     * 取得节点状态信息
     *
     * @param dsnTaskCommon
     * @return
     */
    DsnTaskCommon findNodeStatusByQuery(DsnTaskCommon dsnTaskCommon);

    /**
     * 取得控制意图节点状态信息
     *
     * @param dsnTaskCommon
     * @return
     */
    DsnTaskCommon findNodeConStatusByQuery(DsnTaskCommon dsnTaskCommon);

    /**
     * 统计设计任务状态
     *
     * @param proId
     * @param specialId
     * @return
     */
    Float findProDsnStatusByProIdAndSpecialId(@Param("proId") Integer proId, @Param("specialId") Integer specialId);

    /**
     * 更新科室设计任务状态
     *
     * @param proId
     * @param specialId
     * @return
     */
    int udpProDsnStatusByProIdAndSpecialId(@Param("proId") Integer proId, @Param("specialId") Integer specialId, @Param("status") Integer status);

    /**
     * 所长用户角色
     *
     * @param userId
     * @return
     */
    List<Role> findUserRoleByUserId(Integer userId);

    /**
     * 设计任务状态平均值取得
     * @param dsnTaskCommon
     * @return
     */
    Float findProDsnStatusByProIdAndTaskNameId(DsnTaskCommon dsnTaskCommon);

    /**
     * 取得任务最晚完成时间
     * @return
     */
    Date findProDsnDateByProIdAndTaskNameId(@Param("proCode") String proCode, @Param("comTaskNameId") Integer comTaskNameId);

    /**
     * 更新销售系统项目状态表中design_status设计状态
     * @param proCode
     * @param proStatus
     * @return
     */
    int updateProDesignStatusByProCode(@Param("proCode") String proCode, @Param("proStatus") Integer proStatus);

    /**
     * 更新销售系统项目状态表中debugging_status调试状态
     * @param proCode
     * @param proStatus
     * @return
     */
    int updateProDebugStatusByProCode(@Param("proCode") String proCode, @Param("proStatus") Integer proStatus);

}
